﻿using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace TransporteAgua
{
    public partial class frmPedidosPorCobrar : Form
    {
        Database datos;
        frmPrincipal parent;
        int OrdenarPorColumna=3;

        public frmPedidosPorCobrar(Database db, frmPrincipal dad)
        {
            InitializeComponent();
            datos = db;
            parent = dad as frmPrincipal;
            llenarGrid();

			// seleccionar columnas por default
			for (int i = 0; i < chkColumnas.Items.Count; i++)
				chkColumnas.SetItemChecked(i, true);
        }
        private void frmPendientes_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            Hide();
        }
		/* llena el grid*/
        public void llenarGrid() {
            gridDatos.Rows.Clear();
            string filtro = generarFiltro();
            int numeroDeFilas = datos.contar("pedidos",filtro);
            string [] ids = datos.getColumn("id","pedidos",filtro,"id",numeroDeFilas);
            foreach(string id in ids) agregarFila(id);
            gridDatos.Sort(gridDatos.Columns[OrdenarPorColumna],ListSortDirection.Ascending);
        }
		/*genera cadena-filtro de busqueda*/
        public string generarFiltro(){
			string tipo = "";
			if (cmbFiltroTipo.Text.Equals("")) tipo = "%";
			else tipo = cmbFiltroTipo.Text;
            string filtro = "WHERE estado='C' AND (cliente LIKE '%"+txtFiltroCliente.Text+"%' OR contacto LIKE '%"+txtFiltroCliente.Text+"%') AND telefono LIKE '%"+txtFiltroTelefono.Text+"%' AND tipo LIKE '"+tipo+"' AND observaciones LIKE '%"+txtFiltroObservaciones.Text+"%' AND direccionE LIKE '%"+txtDireccion.Text+"%' AND operador LIKE '%"+txtFiltroOperador.Text+"%'";
            if (chkFiltroRecepcion.Checked) 
				filtro += "AND (fechaRecibido BETWEEN '" + recepcionDesde.Value.ToString("yyyy-MM-dd") + "' AND '" + recepcionHasta.Value.ToString("yyyy-MM-dd") + " 23:59:59' )";
			if (chkFiltroEnvio.Checked)
				filtro += "AND (fechaEnvio BETWEEN '" + envioDesde.Value.ToString("yyyy-MM-dd") + "' AND '" + envioHasta.Value.ToString("yyyy-MM-dd") + " 23:59:59' )";
			if (chkFiltroEnviado.Checked)
				filtro += "AND (fechaEnviado BETWEEN '" + enviadoDesde.Value.ToString("yyyy-MM-dd") + "' AND '" + enviadoHasta.Value.ToString("yyyy-MM-dd") + " 23:59:59' )";
            return filtro;
        }
		/* agrega una fila al grid*/
        public void agregarFila(string id) {
            string [] pedido = datos.getRow(id, "pedidos");
			gridDatos.Rows.Insert(0, int.Parse(pedido[0]), int.Parse(pedido[1]), pedido[2], pedido[3], pedido[4], pedido[5], pedido[6], pedido[7], int.Parse(pedido[8]), float.Parse(pedido[9]), pedido[10], DateTime.Parse(pedido[11]), DateTime.Parse(pedido[12]), DateTime.Parse(pedido[13]), pedido[14], int.Parse(pedido[15]),pedido[16],pedido[17]);
        }
		//Seleccionar columnas a mostrar
		//private void seleccionarColumnas() {
		//    gridDatos.Columns[0].Visible = false;
		//}
        private void btnRefresh_Click(object sender, EventArgs e)
        {
            llenarGrid();
        }
		/* se cambio la celda seleccionada*/
        private void gridDatos_CurrentCellChanged(object sender, EventArgs e)
        {
			gridDatos.ClearSelection();
			if (gridDatos.RowCount > 1)
				if (gridDatos.CurrentRow != null)
					gridDatos.Rows[gridDatos.Rows.IndexOf(gridDatos.CurrentRow)].Selected = true;
        }

        private void txtFiltroObservaciones_TextChanged(object sender, EventArgs e)
        {
            llenarGrid();
        }
		/* guardar ultima columna ordenada*/
        private void gridDatos_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
        {
            OrdenarPorColumna = e.Column.Index;
        }
		/*seleccionar columna a mostrar*/
		private void chkColumnas_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            foreach(DataGridViewColumn c in gridDatos.Columns){
                string item = this.chkColumnas.GetItemText(this.chkColumnas.Items[e.Index]);
                if(c.HeaderText.Equals(item)){
                    if(e.NewValue.ToString().Equals("Checked")) c.Visible = true;
                    else c.Visible=false;
                    break;
                }
            }
        }
		private void chkFiltroRecepcion_CheckedChanged(object sender, EventArgs e)
		{
			recepcionDesde.Enabled = recepcionHasta.Enabled = chkFiltroRecepcion.Checked;
			llenarGrid();
		}

		private void recepcionDesde_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void txtFiltroCliente_TextChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void txtFiltroTelefono_TextChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void txtDireccion_TextChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void cmbFiltroTipo_SelectedIndexChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void txtFiltroObservaciones_TextChanged_1(object sender, EventArgs e)
		{
			llenarGrid();
		}
		private void chkFiltroEnvio_CheckedChanged(object sender, EventArgs e)
		{
			envioDesde.Enabled = envioHasta.Enabled = chkFiltroEnvio.Checked;
			llenarGrid();
		}

		private void envioDesde_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void envioHasta_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void recepcionHasta_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}
		/*obtiene saldo y nombre de renglon seleccionado*/
		private void gridDatos_SelectionChanged(object sender, EventArgs e)
		{
			try
			{
				txtInfoSaldo.Text = datos.getColumn("saldo", "clientes", "WHERE id='" + gridDatos.SelectedRows[0].Cells[1].Value.ToString() + "'", "id", 1)[0];
				txtInfoNombre.Text = datos.getColumn("nombre", "clientes", "WHERE id='" + gridDatos.SelectedRows[0].Cells[1].Value.ToString() + "'", "id", 1)[0];
				btnMostrarInfo.Enabled = true;
			}
			catch (Exception)
			{
				txtInfoNombre.Text = txtInfoSaldo.Text = "";
				btnMostrarInfo.Enabled = false;
			}
		}
		/*abre ventana de clientes mostrando el seleccionado*/
		private void btnMostrarInfo_Click(object sender, EventArgs e)
		{
			parent.clientes.mostrarCliente(gridDatos.SelectedRows[0].Cells[1].Value.ToString());
			parent.clientes.Show();
			parent.clientes.Focus();
		}

		private void chkFiltroEnviado_CheckedChanged(object sender, EventArgs e)
		{
			enviadoDesde.Enabled = enviadoHasta.Enabled = chkFiltroEnviado.Checked;
			llenarGrid();
		}

		private void enviadoDesde_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void enviadoHasta_ValueChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}

		private void txtFiltroOperador_TextChanged(object sender, EventArgs e)
		{
			llenarGrid();
		}
		/* ventana de cobranza*/
		private void btnCobranza_Click(object sender, EventArgs e)
		{
			try
			{
				string[] pedido = datos.getRow(gridDatos.SelectedRows[0].Cells[0].Value.ToString(), "pedidos");
				parent.cobranza.cobrar(pedido);
			}
			catch (NullReferenceException)
			{
				MessageBox.Show(this, "Debes seleccionar un pedido.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}
    }
}
